#include <cmath>
#include <iostream>

using namespace std;
/*
问题1: 10 次落地后，反弹的高度
*/
double popHeight(int times, double height) {
  return height / pow(2, times);
}

/*
times - 接触地面的次数
*/
double popHeightRecursive(int times) {
  // 递归终止条件
  if (times == 1) {
    return 50;
  }

  // 递归公式
  // n 次反弹 = n - 1 次反弹 / 2
  return popHeightRecursive(times - 1) / 2;
}

/*
问题2: 第 10 次小球落到地上的时候，一共飞行了多长距离？
*/
// height - 下落时的初始高度
// double totalDistance(double height) {
//   double result = height;

//   for (int i = 1; i <= 9; ++i) {
//     result += popHeight(i, height) * 2;
//   }

//   return result;
// }

double totalDistance(int times) {
  if (times == 1) {
    return 100;
  }

  return totalDistance(times - 1) + 2 * popHeight(times - 1, 100);
}

int main(int argc, char const *argv[])
{
  /* code */
  cout << totalDistance(10) << endl;
  /*
  popHeightRecursive(9)/2
  popHeightRecursive(8)/2
  popHeightRecursive(7)/2
  popHeightRecursive(6)/2
  popHeightRecursive(5)/2
  12.5/2
  25/2
  50/2
  popHeightRecursive(1)/2 => 50
  */
  return 0;
}
